<?php
class class_ABMPacientes
{
	private $_db; 
	function __construct()
	{
		$this->config();
	}
	
	function method_getPlanes($params, $error)
    {
        $this->_db->setQuery("
        	SELECT cod_plan AS value,
        	CONCAT(planes.descripcion, ' - ',obras_sociales.descripcion) AS label
        	FROM planes 
        	INNER JOIN obras_sociales ON planes.cod_obra_social = obras_sociales.cod_obra_social
        	ORDER BY label
        	");
        $this->_db->alter();
    	//if (mysql_error()) { $error->SetError(JsonRpcError_Unknown, (__FILE__ . " - " . (__LINE__ - 2) . ": " . mysql_error())); return $error; }
		$regs = $this->_db->loadResult();
		$result->values = $regs;
		$result->nullValue = true;
		return $result;
    }
	function method_getMedicos($params, $error)
    {
    	if (count($params) != 0) { $error->SetError(JsonRpcError_ParameterMismatch, "Expected 0 parameter; got " . count($params)); return $error; }
    	
//		$this->_db->setQuery("SELECT dni_medico, CONCAT(apellido, ', ', nombres) as apeynom FROM medicos");
		$this->_db->setQuery("SELECT dni_usuario as value, CONCAT(apellido, ', ', nombres) as label FROM usuarios WHERE cod_tipo_usuario = '3'");
		$this->_db->alter();
    	if (mysql_error()) { $error->SetError(JsonRpcError_Unknown, (__FILE__ . " - " . (__LINE__ - 2) . ": " . mysql_error())); return $error; }
    	$result = '';
		$result->values = $this->_db->loadResult();
		$result->nullValue = true;
    	return $result;
    }
	function method_getListaPacientes($params, $error)
    {
    	$p = $params[0];
    	
    	if ($p) {
    		switch ($p->json) {
    			case "dni_paciente":
    				$WHERE = " WHERE dni_paciente LIKE '" . $p->txtFiltro . "%' ";
    			break;
    			case "apellido":
    				$WHERE = "";
    				$buscar = explode(" ", $p->txtFiltro);
    				foreach ($buscar as $palabra) {
    					$palabra = trim($palabra);
    					if ($WHERE) {
    						$WHERE .= "AND (pacientes.apellido LIKE '%" . $palabra . "%' OR pacientes.nombres LIKE '%" . $palabra . "%') ";
    					} else {
    						$WHERE .= "WHERE ((pacientes.apellido LIKE '%" . $palabra . "%' OR pacientes.nombres LIKE '%" . $palabra . "%') ";
    					}
    				}
    				$WHERE .=" ) ";
    				//$WHERE = " WHERE (pacientes.apellido LIKE '%" . $p->txtFiltro . "%' OR pacientes.nombres LIKE '%" . $p->txtFiltro . "%') ";
    			break;
    			case "fecha_nacimiento":
    				$WHERE = " WHERE (YEAR(CURDATE())-YEAR(pacientes.fecha_nacimiento) + IF(DATE_FORMAT(CURDATE(),'%m-%d') > DATE_FORMAT(pacientes.fecha_nacimiento,'%m-%d'), 0, 0)) LIKE '" . trim($p->txtFiltro) . "%' ";
    			break;
    			case "telefono1":
    				$WHERE = " WHERE pacientes.telefono1 LIKE '" . $p->txtFiltro . "%' ";
    			break;
    			case "telefono2":
    				$WHERE = " WHERE pacientes.telefono2 LIKE '" . $p->txtFiltro . "%' ";
    			break;
    			case "nro_historia_clinica":
    				$WHERE = " WHERE pacientes.nro_historia_clinica LIKE '" . $p->txtFiltro . "%' ";
    			break;
    			case "origen":
    				$WHERE = " WHERE (CASE (pacientes.origen) WHEN 'P' THEN 'Personal' WHEN 'C' THEN 'Caraffa' WHEN 'O' THEN 'Policlinico' END)  LIKE '%" . $p->txtFiltro . "%' ";
    			break;
    			case "dni_usuario":
    				$WHERE = " WHERE (usuarios.apellido LIKE '%" . $p->txtFiltro . "%' OR usuarios.nombres LIKE '%" . $p->txtFiltro . "%') ";
    			break;
    		}
    		
    		$this->_db->setQuery("
    			SELECT
    				dni_paciente AS cod_paciente,
    				dni_paciente,
    				CONCAT(pacientes.apellido, ', ', pacientes.nombres) AS apellido,
    				YEAR(CURDATE())-YEAR(pacientes.fecha_nacimiento) + IF(DATE_FORMAT(CURDATE(),'%m-%d') > DATE_FORMAT(pacientes.fecha_nacimiento,'%m-%d'), 0, 0) AS edad,
    				fecha_nacimiento,
    				telefono1,
    				telefono2,
    				nro_historia_clinica,
    				origen,
    				CONCAT(usuarios.apellido, ', ', usuarios.nombres) as medico
    			FROM pacientes
    			LEFT JOIN usuarios USING(dni_usuario) "
    			. $WHERE
    			. " LIMIT 50 "
    		);
    	} else {
			$this->_db->setQuery("
				SELECT
					dni_paciente AS cod_paciente, 
					dni_paciente, 
					CONCAT(pacientes.apellido, ', ', pacientes.nombres) AS apellido, 
					YEAR(CURDATE())-YEAR(pacientes.fecha_nacimiento) + IF(DATE_FORMAT(CURDATE(),'%m-%d') > DATE_FORMAT(pacientes.fecha_nacimiento,'%m-%d'), 0, 0) AS edad,
					fecha_nacimiento,
					telefono1, 
					telefono2, 
					nro_historia_clinica,
					origen,
					CONCAT(usuarios.apellido, ', ', usuarios.nombres) as medico 
				FROM pacientes
				LEFT JOIN usuarios USING(dni_usuario)
			");
    	}
		$this->_db->alter();
    	if (mysql_error()) { $error->SetError(JsonRpcError_Unknown, (__FILE__ . " - " . (__LINE__ - 2) . ": " . mysql_error())); return $error; }
		$result = array();
		$regs = $this->_db->loadResult();
    	FOREACH ($regs as $reg)
		{
			$row = array();
			array_push($row, $reg->cod_paciente);
			array_push($row, $reg->dni_paciente);
			array_push($row, $reg->apellido);
			if($reg->fecha_nacimiento != 0000-00-00){
				array_push($row, $reg->edad);	
			}
			else{
				array_push($row, '0');
			}
			
			array_push($row, $reg->telefono1);
			array_push($row, $reg->telefono2);
			array_push($row, $reg->nro_historia_clinica);
			
			switch ($reg->origen) {
				case 'P':
					$reg->origen = 'Personal';
				break;
				case 'C':
					$reg->origen = 'Caraffa';
				break;
				case 'O':
					$reg->origen = 'Policlinico';
				break;
				default:
					$reg->origen = '';
				break;
			}
			
			array_push($row, $reg->origen);
			array_push($row, $reg->medico);
			array_push($result, $row);
		}
		return $result;
    }
	function method_btnBorrar($params, $error)
    {
        if (count($params) != 1)
        {
            $error->SetError(JsonRpcError_ParameterMismatch,
                             "Expected 1 parameter; got " . count($params));
            return $error;
        }

        $this->_db->setQuery("DELETE FROM pacientes WHERE dni_paciente = '" . $params[0] . "'");
        $this->_db->alter();
    	if (mysql_error())
		{
            $error->SetError(JsonRpcError_Unknown, mysql_error());
            return $error;
		}
		return true;
    }
	function method_btnModificar($params, $error)
    {
		$this->_db->setQuery("
			SELECT dni_paciente, 
				apellido, 
				nombres, 
				IF(YEAR(fecha_nacimiento = '0000'),'11/11/1111', DATE_FORMAT(fecha_nacimiento, '%d/%m/%Y')) AS fecha_nacimiento,
				domicilio, 
				telefono1, 
				telefono2, 
				cod_plan1, 
				nro_afiliado1, 
				cod_plan2, 
				nro_afiliado2, 
				nro_historia_clinica,
				origen,
				dni_usuario 
			FROM pacientes 
			WHERE 
				dni_paciente = '" . $params[0] . "' 
			LIMIT 1
		");
		$this->_db->alter();
    	if (mysql_error()) { $error->SetError(JsonRpcError_Unknown, (__FILE__ . " - " . (__LINE__ - 2) . ": " . mysql_error())); return $error; }
		$reg = $this->_db->loadResult();
		return $reg[0];
    }
	function method_opAlta($params, $error)
    {
    	mysql_query("START TRANSACTION");
    	
    	$q = mysql_query("UPDATE configuraciones SET nro_historia_clinica = (nro_historia_clinica + 1) WHERE nro_historia_clinica = '" . $params[0]->nro_historia_clinica . "' LIMIT 1");
    	//$this->_db->alter();
    	if (mysql_error()) { $error->SetError(JsonRpcError_Unknown, (__FILE__ . " - " . (__LINE__ - 2) . ": " . mysql_error())); mysql_query("ROLLBACK"); return $error; }
    	
        $q = mysql_query("
        INSERT INTO pacientes 
        (dni_paciente, 
        apellido, 
        nombres, 
        fecha_nacimiento, 
        domicilio, 
        telefono1, 
        telefono2, 
        cod_plan1, 
        nro_afiliado1, 
        cod_plan2, 
        nro_afiliado2, 
        nro_historia_clinica,
        origen,
        dni_usuario) 
        VALUES 
        ('" . $params[0]->dni_paciente . "', 
        '" . $params[0]->apellido . "', 
        '" . $params[0]->nombres . "', 
        '" . owFunciones::DateToSQL($params[0]->fecha_nacimiento) . "', 
        '" . $params[0]->domicilio . "', 
        '" . $params[0]->telefono1 . "', 
        '" . $params[0]->telefono2 . "', 
        '" . $params[0]->cod_plan1 . "', 
        '" . $params[0]->nro_afiliado1 . "', 
        '" . $params[0]->cod_plan2 . "', 
        '" . $params[0]->nro_afiliado2 . "', 
        '" . $params[0]->nro_historia_clinica . "',
        '" . $params[0]->origen . "',
        '" . $params[0]->dni_usuario . "'
        )");
        //$this->_db->alter();
    	if (mysql_error()) { $error->SetError(JsonRpcError_Unknown, (__FILE__ . " - " . (__LINE__ - 2) . ": " . mysql_error())); mysql_query("ROLLBACK"); return $error; }
    	
    	mysql_query("COMMIT");
    }
	function method_opModificacion($params, $error)
    {
    	mysql_query("START TRANSACTION");
    	
    	$this->_db->setQuery("UPDATE configuraciones SET nro_historia_clinica = (nro_historia_clinica + 1) WHERE nro_historia_clinica = '" . $params[0]->nro_historia_clinica . "' LIMIT 1");
    	$this->_db->alter();
    	if (mysql_error()) { mysql_query("ROLLBACK"); $error->SetError(JsonRpcError_Unknown, (__FILE__ . " - " . (__LINE__ - 2) . ": " . mysql_error())); return $error; }
    	
        $this->_db->setQuery("
        UPDATE pacientes SET 
        apellido = '" . $params[0]->apellido . "', 
        nombres = '" . $params[0]->nombres . "', 
        fecha_nacimiento = '" . owFunciones::DateToSQL($params[0]->fecha_nacimiento) . "', 
        domicilio = '" . $params[0]->domicilio . "', 
        telefono1 = '" . $params[0]->telefono1 . "', 
        telefono2 = '" . $params[0]->telefono2 . "', 
        cod_plan1 = '" . $params[0]->cod_plan1 . "', 
        nro_afiliado1 = '" . $params[0]->nro_afiliado1 . "', 
        cod_plan2 = '" . $params[0]->cod_plan2 . "', 
        nro_afiliado2 = '" . $params[0]->nro_afiliado2 . "' , 
        nro_historia_clinica = '" . $params[0]->nro_historia_clinica . "',
        origen = '" . $params[0]->origen . "',
        dni_usuario = '" . $params[0]->dni_usuario . "'
        WHERE dni_paciente = '" . $params[0]->dni_paciente . "' 
        LIMIT 1");
        $this->_db->alter();
   	 	if (mysql_error()) { mysql_query("ROLLBACK"); $error->SetError(JsonRpcError_Unknown, (__FILE__ . " - " . (__LINE__ - 2) . ": " . mysql_error())); return $error; }
   	 	
   	 	mysql_query("COMMIT");
    }

    function method_getNroHistoriaClinica($params, $error)
	{
		$this->_db->setQuery("SELECT nro_historia_clinica AS value FROM configuraciones LIMIT 1");
		$this->_db->alter();
		if (mysql_error()) { $error->SetError(JsonRpcError_Unknown, (__FILE__ . " - " . (__LINE__ - 2) . ": " . mysql_error())); return $error; }
		$reg = $this->_db->loadResult();
		$result->values = $reg;
		return $result;
	}
    
    
	private function config()
	{
		require_once("conexion.php");
		require_once("DataBase.php");
		$this->_db = new DataBase($SERVIDOR,$USUARIO,$PASSWORD,$BASE);
		mysql_query("SET NAMES utf8");
	}
}
?>